#!/usr/bin/env python
# -*- coding: utf-8 -*-

'''
Autor: Ricardo Isabel nº5140
Data: 15/02/2012
'''

import csv
import sqlite3
from operator import itemgetter
import import_csv


def statistic_1():
    '''
    Calcula a 1ª estatistica -nº de estabelecimentos por ano
    Não esta a funcionar bem
    '''
    listaEstatistica = []    
    data1 = ""
    data2 = ""
    count = 0
    bolean = True
    
    lista = import_csv.create_list()
    
    #ordena a lista de estabelecimentos por ano (6ª coluna)
    lista = sorted(lista, key=itemgetter(6,8))

    for x in lista:
        if bolean == True:
            data1 = x[6]
            data2 = x[8]
            bolean = False
            pass
        
        if x[8] != data2:
            if x[6] != data1:
                listaEstatistica.append((data1,count))
                count = 0            
        else:
            count += 1
        pass

    return listaEstatistica



def statistic_2():
    '''
    Calcula a 2ª estatistica -nº de professores por nome de estabelecimentos
    e por ano
    '''
    listaEstatistica = []    
    data1 = ""
    data2 = ""
    count = 0
    bolean = True
    
    lista = import_csv.create_list()
    
    #ordena a lista por nome de estabelecimentos (8ª coluna) e por ano (6ª coluna)
    lista = sorted(lista, key=itemgetter(8,6))

    '''
    Guarda o primeiro dado da lista nos ficheiro data 1 e 2
    Se os dados forem iguais aos anteriores incrementa 1 valor ao contador
    Se os dados forem diferentes aos anteriores o contador fica a 0 e acrescenta
    um registo à "listaEstatistica" 
    '''
    for x in lista:
        #guarda o primeiro registo da lista em data1 e data2 
        if bolean == True:
            data1 = x[8]
            data2 = x[6]
            bolean = False
            pass
        #se for igual ao anterior incrementa 1 valor ao contador
        if x[8] == data1 and x[6] == data2:
            count += 1
        #se for diferente adiciona um registo à listaEstatistica     
        else:
            listaEstatistica.append((data1,data2,count))
            count = 0
            pass
        data1 = x[8]
        data2 = x[6]
        pass

    return listaEstatistica


def statistic_3():
    '''
    Calcula a 3ª estatistica -nº de professores por nome de estabelecimentos
    e por ano
    '''
    listaEstatistica = []    
    data1 = ""
    data2 = ""
    data3 = ""
    count = 0
    bolean = True
    
    lista = import_csv.create_list()
    
    #ordena a lista por nome de estabelecimentos (8ª coluna),categoria (4ª coluna) e por ano (6ª coluna)
    lista = sorted(lista, key=itemgetter(8,6,4))

    '''
    Guarda o primeiro dado da lista nos ficheiro data 1 e 2
    Se os dados forem iguais aos anteriores incrementa 1 valor ao contador
    Se os dados forem diferentes aos anteriores o contador fica a 0 e acrescenta
    um registo à "listaEstatistica" 
    '''
    for x in lista:
        #guarda o primeiro registo da lista em data1,data2 e data3 
        if bolean == True:
            data1 = x[8]
            data2 = x[4]
            data3 = x[6]
            bolean = False
            pass
        #se for igual ao anterior incrementa 1 valor ao contador
        if x[8] == data1 and x[4] == data2 and x[6] == data3:
            count += 1
        #se for diferente adiciona um registo à listaEstatistica 
        else:
            listaEstatistica.append((data1,data2,data3,count))
            count = 0
            pass
        data1 = x[8]
        data2 = x[4]
        data3 = x[6]
        pass

    return listaEstatistica



def stat1_csv(lista):
    '''
    Escreve os dados de uma lista num ficheiro csv
    '''
 
    ficheiro = open('estatistica1.csv',"wb")
    csvwriter = csv.writer( ficheiro, delimiter=',')
    csvwriter.writerow(("Ano","N Professores"))

    for x in lista:
        csvwriter.writerow(((x[0]).encode('utf-8'),x[1]))
        pass
    ficheiro.close()

    pass




def stat2_csv(lista):
    '''
    Escreve os dados de uma lista num ficheiro csv
    '''
 
    ficheiro = open('estatistica2.csv',"wb")
    csvwriter = csv.writer( ficheiro, delimiter=',')
    #primeira linha do ficheiro CSV
    csvwriter.writerow(("Nome Estabelecimento","Ano","N Professores"))

    #percorre a lista e grava os dados no ficheiro estatistica2.csv
    for x in lista:
        csvwriter.writerow(((x[0]).encode('utf-8'),(x[1]).encode('utf-8'),x[2]))
        pass   
    ficheiro.close()

    pass



def stat3_csv(lista):
    '''
    Escreve os dados de uma lista num ficheiro csv
    '''
 
    ficheiro = open('estatistica3.csv',"wb")
    csvwriter = csv.writer( ficheiro, delimiter=',')
    #primeira linha do ficheiro CSV
    csvwriter.writerow(("Nome Estabelecimento","Categoria","Ano","N Professores"))

    #percorre a lista e grava os dados no ficheiro estatistica3.csv
    for x in lista:
        csvwriter.writerow(((x[0]).encode('utf-8'),(x[1]).encode('utf-8'),(x[2]).encode('utf-8'),x[3]))
        pass     
    ficheiro.close()

    pass



def stat2_html(lista):
    ficheiro = file("estatistica2.html", "w")
    ficheiro.write("<html> <body>")
    ficheiro.write('<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body>')
    #primeira linha do ficheiro HTML
    ficheiro.write('<h3>Nome do Estabelecimento - Ano - Numero de Professor</h3>')

    #percorre a lista linha a linha
    for x in lista:
        ficheiro.write("<p>")
        #percorre a linha para verificar se o valor é inteiro ou string para que
        #possa ser gravado no ficheiro html correctamente
        for z in x:
            if type(z) is int:
                ficheiro.write("»{0}".format((z)))
            else:
                ficheiro.write("»{0}".format((z).encode('utf-8')))
            pass
    ficheiro.write("<7p>")
    ficheiro.write("</html> </body>") 
    ficheiro.close()
    pass


def stat3_html(lista):
    ficheiro = file("estatistica3.html", "w")
    ficheiro.write("<html> <body>")
    ficheiro.write('<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body>')
    #primeira linha do ficheiro HTML
    ficheiro.write('<h3>Nome do Estabelecimento - Categoria - Ano - Numero de Professor</h3>')

    #percorre a lista linha a linha
    for x in lista:
        ficheiro.write("<p>")
        #percorre a linha para verificar se o valor é inteiro ou string para que
        #possa ser gravado no ficheiro html correctamente
        for z in x:
            if type(z) is int:
                ficheiro.write("»{0}".format((z)))
            else:
                ficheiro.write("»{0}".format((z).encode('utf-8')))
            pass
    ficheiro.write("<7p>")
    ficheiro.write("</html> </body>") 
    ficheiro.close()
    pass
